package repositorios;

import entidades.UnidadeMilitar;
import excessoes.DAOException;
import interfaces.InterfaceUnidadeMilitarDAO;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.criterion.Order;
import org.hibernate.exception.ConstraintViolationException;

/**
 *
 * @author Marcelo Gomes Neto
 */
public class UnidadeMilitarDAOHibernate implements InterfaceUnidadeMilitarDAO {
    
    private Session session;

    public void setSessao(org.hibernate.Session session) {
        this.session = session;
    }

    @Override
    public UnidadeMilitar carregarUnidadeMilitar(Integer id) {
        return (UnidadeMilitar) this.session.get(UnidadeMilitar.class, id);
    }
        
    @Override
    public void alterarUnidadeMilitar(UnidadeMilitar unidadeMilitar) 
    {
        Integer id = unidadeMilitar.getIdunidade();
        if (id == null || id == 0)
        {
            UnidadeMilitar unidadeMilitarId = this.carregarUnidadeMilitar(id);
            unidadeMilitarId.setIdunidade(id);
            this.session.evict(id);
        }
        this.session.clear();
        this.session.update(unidadeMilitar);
    }

    @Override
    public void excluirUnidadeMilitar(UnidadeMilitar unidadeMilitar) {
        this.session.delete(unidadeMilitar);
    }

    @Override
    public void salvarUnidadeMilitar(UnidadeMilitar unidadeMilitar) throws DAOException 
    {
        try {
           this.session.save(unidadeMilitar);
        }
        catch (ConstraintViolationException e) {
            throw new DAOException("Erro de chave duplicada\n" + e.getConstraintName());
        }
    }

    @Override
    @SuppressWarnings("unchecked")
    public List<UnidadeMilitar> listarUnidadeMilitar() 
    {
        Criteria criteria = this.session.createCriteria(UnidadeMilitar.class);
        criteria.addOrder((Order.asc("idunidade")));
        return criteria.list();
    }
    
    @Override
    @SuppressWarnings("unchecked")
    public List<UnidadeMilitar> listarUnidadeMilitarDescricao() 
    {
        Criteria criteria = this.session.createCriteria(UnidadeMilitar.class);
        criteria.addOrder((Order.asc("descricao")));
        return criteria.list();
    }
    
    @Override
    @SuppressWarnings("unchecked")
    public List<String> listarTipo() 
    {
        Criteria criteria = this.session.createCriteria(UnidadeMilitar.class);
        criteria.addOrder((Order.asc("idunidade")));
        return criteria.list();
    }
}
